import json
from flask import Flask
from flask import render_template
import kruskal
import primArithmatic
from dataProcessing import getDataFromText, dataToMatrix

app = Flask(__name__)


@app.route('/')
def hello_world():
    data = getDataFromText()  # 获取文本中的信息
    dataMatrix= dataToMatrix(data)  # 将文本中的距离信息转换为矩阵
    low=len(dataMatrix)  # 获取邻接矩阵的阶数
    return render_template("index.html", data=dataMatrix.astype(int), longth=low)


# Pindex.html:使用prime算法的首页
@app.route('/p')
def p():
    return render_template("Pindex.html")


# Kindex.html:使用kruskal算法的首页
@app.route('/k')
def k():
    return render_template("Kindex.html")


# node.js中同步请求获取点的集合
@app.route("/getNotes")
def getNotes():
    data = getDataFromText()  # 获取文本中的矩阵信息
    dataMatrix = dataToMatrix(data)  # 将文本中的距离信息转换为矩阵
    data = dataMatrix.astype(int)  # 将矩阵变成一个元素为int类型的矩阵
    weight = json.dumps(data.tolist())  # 将矩阵序列化
    return weight


# node.js中同步请求获取prim算法所的到的最小生成树
@app.route("/getMinTreeByPrime")
def getMinTreeByPrime():
    data = getDataFromText()  # 获取文本中的矩阵信息
    dataMatrix = dataToMatrix(data)  # 将文本中的距离信息转换为矩阵
    minTreeData=primArithmatic.primArithmatic(dataMatrix)  # 使用prime算法得到最小生成树
    minTreeData=json.dumps(minTreeData)  # 序列化
    return minTreeData


# node.js中同步请求获取Kruskal算法所得的最小生成树：
@app.route("/getMinTreeByKruskal")
def getMinTreeByKruskal():
    data=getDataFromText()  # 获取文本信息
    dataMatrix=dataToMatrix(data)  # 将文本的距离信息转换为矩阵
    minTreeData=kruskal.kruskalArithmatic(dataMatrix)  # 使用Kruskal算法得到最小生成树
    minTreeData=json.dumps(minTreeData)  # 序列化
    return minTreeData


if __name__ == '__main__':
    app.run()
